// 升级版直接用一个名字  加上点语法运用  const 常量
const utils = new Object();

// 1. 生成 min ~ max 的随机数
utils.randomInt = function(min = 0, max = 1) {
  // 函数内部返回随机颜色
  return Math.floor(Math.random() * (max - min + 1) + min);
};

// 2. rgb 随机颜色封装
utils.randomRGB = function() {
  // 分别调用随机数三次，生成三个不同的随机数
  const r = utils.randomInt(0, 255);
  const g = utils.randomInt(0, 255);
  const b = utils.randomInt(0, 255);
  // 拼接成 rgb(xx,xx,xx) 颜色格式
  return "rgb(" + r + "," + g + "," + b + ")"; // 字符串拼接易错点，要小心
};

// 3. 16 进制随机颜色
utils.randomHexColor = function() {
  // 颜色数组
  const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F"];
  // 颜色初始值，十六进制颜色前有 # 符号
  let hexColor = "#";
  // 循环六次
  for (let i = 0; i < 6; i++) {
    // 随机生成随机数作为数组索引，从 arr 数组中随机获取一个，累加到 hexColor 变量中
    hexColor += arr[utils.randomInt(0, 15)];
  }
  // 循环结束后内部返回
  return hexColor;
};

// 4. 日期格式化封装
utils.formatDate = function(split = "-") {
  // split 默认分隔符
  // 获取当前系统日期和时间
  const myDate = new Date();
  // 获取年份
  const yyyy = myDate.getFullYear();
  // 获取月份，zero 小于 10 补0
  const mm = utils.zero(myDate.getMonth() + 1);
  // 获取日期，zero 小于 10 补0
  const dd = utils.zero(myDate.getDate());
  // 返回格式化后日期 yyyy-mm-dd
  return yyyy + split + mm + split + dd;
};

// 5. 时间格式化封装
utils.formatTime = function(split = ":") {
  // split 默认分隔符
  // 获取当前系统日期和时间
  const myDate = new Date();
  // 获取小时，zero 小于 10 补0
  const hh = utils.zero(myDate.getHours());
  // 获取分钟，zero 小于 10 补0
  const mm = utils.zero(myDate.getMinutes());
  // 获取秒，zero 小于 10 补0
  const ss = utils.zero(myDate.getSeconds());
  // 返回格式化后时间 hh:mm:ss
  return hh + split + mm + split + ss;
};

// 6. 小于 10 补 0
utils.zero = function(number) {
  // 三元表达式结构： 条件 ? true 执行1 : false 执行2;
  // 三元表达式运行过程，number 小于 10 吗? 如果 true 结果为 '0' + number : 如果 false 结果为 number;
  return number < 10 ? "0" + number : number;
};

// 7.判断一个数据是否在有个数组中
utils.includes = function(data, arr) {
  // 遍历
  for (let i = 0; i < arr.length; i++) {
    // 分支比较
    if (arr[i] === data) {
      // return 返回值，跳出函数
      return true;
    }
  }
  // 如果循环结束了都没有退出，就返回假
  return false;
};

//8. 把获取本地存储的代码  抽离封装
utils.getItem = function(key) {
  // 1. 获取本地存储数组
  let value = JSON.parse(localStorage.getItem(key));

  // 如果获取到不是数组，重新赋值成数组
  //判断 如果获取到不是数组，初始化成数组
  if (value instanceof Array === false) {
    // 如果条件不符合 则本地存储等于一个空数组
    value = [];
  }
  // 调用后内部返回数据
  return value;
};

// 9. 封装设置本地存储的方法代码   key代表键名称  value代表数据
utils.setItem = function(key, value) {
  // 3. 把数组再保存回去， localStorage对像.setItem表示设置一条新的数据
  // JSON.stringify(value)表示用JSON方法转成字符串
  localStorage.setItem(key, JSON.stringify(value));
};

//10. 封装查找单个元素的代码
utils.qs = function(selector) {
  return document.querySelector(selector);
};

//11. 封装查找多个元素的代码
utils.qsa = function(selector) {
  return document.querySelectorAll(selector);
};

//12. 封装获取每个元素
utils.getIndex = function(current) {
  return Array.from(current.parentNode.children).indexOf(current);
};
// indexOf()    获取元素在集合中的索引值
//  children      子元素集合
//  Array.from()  伪数组转真数组




(function (window) {

  // 将小数点清零

  var toInteger = function (value) {

    value = Math.round(parseFloat(value));

    return value;

  };

  // 保留一位小数点

  var toDecimal = function (value) {

    value = Math.round(parseFloat(value) * 10) / 10;

    if (value.toString().indexOf(".") < 0) {

      value = value.toString() + ".0";

    }

    return value;

  }

  // 保留两位小数点
// 把遍历 或者 你需要的 值 变成 value
  var toFloat = function (value) {

    value = Math.round(parseFloat(value) * 100) / 100;

    if (value.toString().indexOf(".") < 0) {

      value = value.toString() + ".00";

    }

    return value;

  }

  // 保留两位小数点，一位小数自动补零

  var toZero = function (value) {

    value = Math.round(parseFloat(value) * 100) / 100;

    var xsd = value.toString().split(".");

    //Ext.log(xsd.length);

    if (xsd.length == 1) {

      value = value.toString() + ".00";

      return value;

    }

    if (xsd.length > 1) {

      if (xsd[1].length < 2) {

        value = value.toString() + "0";

      }

      return value;

    }

  }

  window.fomatFloat = {

    toInteger: toInteger,

    toDecimal: toDecimal,

    toFloat: toFloat,

    toZero: toZero,

  };

})(window);

console.log(fomatFloat.toInteger(1234.45678));

console.log(fomatFloat.toDecimal(1234.45678));

console.log(fomatFloat.toFloat(1234.45678));

console.log(fomatFloat.toZero(1234.45678));

console.log(fomatFloat.toZero(1234.1));

console.log(fomatFloat.toZero(1234));